<?php
declare (strict_types = 1);

namespace app\common\controller;

use app\common\util\ApiResponseTrait;
use app\common\service\BaseService;
use think\facade\Request;

class BaseController
{
    // 统一API返回json
    use ApiResponseTrait;

    // service实例
    protected $service;

    public function __construct(BaseService $service)
    {
        // 实例化service
        $this->service = $service;
    }

    /**
     * 获取过滤后的参数防止XSS
     *
     * @return array
     */
//    protected function getParams(): array
//    {
//        $params = Request::param();
//
//        // 过滤掉 create_time 和 update_time 字段（如果存在）
//        $filteredKeys = array_diff_key($params, array_flip(['create_time', 'update_time', 'page', 'page_size']));
//
//        return array_map(function ($value) {
//            if (is_string($value)) {
//                // 去除空格并转义 HTML 特殊字符
//                return htmlspecialchars(trim($value), ENT_QUOTES, 'UTF-8');
//            }
//            return $value;
//        }, $filteredKeys);
//    }
    /**
     * 获取请求参数（支持白名单/黑名单）
     *
     * @param array|null $allowFields 白名单字段（优先）
     * @param array $ignoreFields 黑名单字段
     * @return array 清理后的参数数组
     */
    protected function getParams(?array $allowFields = null, array $ignoreFields = []): array
    {
        $params = Request::param();

        if ($allowFields !== null) {
            // 使用白名单过滤
            $filtered = array_intersect_key($params, array_flip($allowFields));
        } else {
            // 使用黑名单过滤
            $filtered = array_diff_key($params, array_flip($ignoreFields));
        }

        // 数据清理
        return array_map(function ($value) {
            if (is_string($value)) {
                return trim($value);
            }
            return $value;
        }, $filtered);
    }
}